iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0

介紹

前面分享了類別與物件間的關係,當物件要設定初始屬性時,可以使用「建構子」(Constructors)。

位於類別中的物件本身如果沒有設定建構子,它才會自動產生基本的(不會出現在程式碼中,沒有做任何事)。通常Constructor我們會用來設定物件的初始內容,配合關鍵字new 使用且建構子名稱必須與類別名稱相同 :
https://ithelp.ithome.com.tw/upload/images/20221003/20151216XVfNRsn1P1.png
像是我們之前介紹過關於物件的設定辦法,最後一個關鍵字我們是說它是類別名稱,其實是用來設定初值的建構子。其中又可細分成兩種,是否有傳入引數。綜合以上,可以將其分為3大類、4個特性 :

  • 預設建構子
  • 自行定義的空建構子
  • 自行定義的非空建構子
  1. 名稱必須與類別名稱相同
  2. 不會產生回傳值
  3. 可以傳入引數
  4. 可以產生多個建構子,可是其函數之參數型態要不同(多載觀念)

下面針對有無引數傳入之建構子概念,做分別介紹。


設定建構子

  • 空建構子
    不論是Java預設還是自行定義一個空的(不帶引數),在程式中都是有一個建構子的概念。
    差別在於,一個不會顯示且完全沒用,一個要自行設定且不用傳入引數,就有一個繼承父類別屬性的子類別。
/*Default*/
public class Main{
	String name;
	int grade;
    char gpa;

	/*public Main(){       //系統預設
    
	}*/
}

/*Constructor(NULL)*/
public class Main{
	String name;
	int grade;
    char gpa;

	public Main(){       //自行設定
	
	}
}

設定建構子的定義會是 :

(Modifier) class_name((argument)){
	//Command
} 

  • 建構子(無引數) :
public class Main{
	String name;
	int grade;
	char gpa;

	public Main(){
		name = "CHI";
		grade = 82;
		gpa = 'A';
	}

	void printout(){
		System.out.println("Your personal information ");
	}

	public static void main(String[] args){
		Main newobj = new Main();
		newobj.printout();
		System.out.println("Student name : " + newobj.name);
		System.out.println("Final test : " + newobj.grade);
    System.out.println("GPA : " + newobj.gpa);
	}
}
  • 程式解析 : 主函數中創立新物件newobj,最後面的建構子內容定義在中間部分。可以發現將內容印出時,建構子設定的初值都有被印出。

建構子傳遞引數

接著我們將上面程式改成運用函數傳入的形式,並介紹新關鍵字this

public class Main{
	String name;
	int grade;
	char gpa;

	public Main(String name, int grade, char gpa){
		this.name = name;
		this.grade = grade;
		this.gpa = gpa;
	}

	void printout(){
		System.out.println("Your personal information");
	}

	public static void main(String[] args){
		Main newobj = new Main("Chi", 82, A);
		newobj.printout();
		System.out.println("Student name : " + newobj.name);
		System.out.println("Final test : " + newobj.grade);
    System.out.println("GPA : " + newobj.gpa);
	}
}

輸出結果 :
https://ithelp.ithome.com.tw/upload/images/20221003/201512168ifWBERVBJ.png

  • 程式解析 : this意旨指向最近的物件,所以當我們使用時,它會指到根據建構子被建立的物件名稱上,並將上述之名字成績等元素繼承到這個物件中。

以上內容若有錯誤,煩請不吝嗇指教!!!謝謝您!!!/images/emoticon/emoticon07.gif


上一篇
Day 17 : 物件與類別關係
下一篇
Day 19 : 前置修飾詞
系列文
30天Java由淺入深30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言